package cn.fancy.sdk;

import java.io.File; 
import java.io.FileInputStream; 
import java.io.IOException; 
import java.util.Collection; 
import java.util.Enumeration; 
import java.util.Map.Entry; 
import java.util.Properties; 
import java.util.Set; 

import android.os.Environment; 
import android.os.Build;

public final class JudgeMIUI {
    private static final String KEY_EMUI_VERSION_CODE = "ro.build.version.emui";
    private static final String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code";
    private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name"; 
    private static final String KEY_MIUI_INTERNAL_STORAGE = "ro.miui.internal.storage";
    
    private static final String manufacturer = Build.MANUFACTURER;
    
	/*
    public static boolean isMIUI() { 
        try { 
            final BuildProperties prop = BuildProperties.newInstance(); 
            return prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null || prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null 
            || prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null; 
        } catch (final IOException e) { 
            return false; 
        }

    }
    */
    
	@Deprecated // use the new method orMIUI()
    public static boolean isMIUI() {
        return isPropertiesExist(KEY_MIUI_VERSION_CODE, KEY_MIUI_VERSION_NAME, KEY_MIUI_INTERNAL_STORAGE);
    }
	
	public static boolean orMIUI() {
		if ("xiaomi".equalsIgnoreCase(manufacturer)) {
			return true;
		} else {
			return false; 
		}
	}
	
	public static boolean orSamsung() {
		if ("samsung".equalsIgnoreCase(manufacturer)) {
			return true;
		} else {
			return false;
		}
	}

    private static boolean isPropertiesExist(String... keys) {
        if (keys == null || keys.length == 0) {
            return false;
        }
        try {
            BuildProperties properties = BuildProperties.newInstance();
            for (String key : keys) {
                String value = properties.getProperty(key);
                if (value != null)
                    return true;
            }
            return false;
        } catch (IOException e) {
            return false;
        }
    }
    
    private static final class BuildProperties { 
        private final Properties properties; 

        private BuildProperties() throws IOException { 
            properties = new Properties(); 
            properties.load(new FileInputStream(new File(Environment.getRootDirectory(), "build.prop"))); 
        } 

        public boolean containsKey(final Object key) { 
            return properties.containsKey(key); 
        }    

        public boolean containsValue(final Object value) { 
            return properties.containsValue(value); 
        } 

        public Set<Entry<Object, Object>> entrySet() { 
            return properties.entrySet(); 
        }

        public String getProperty(final String name) { 
            return properties.getProperty(name); 
        }

        public String getProperty(final String name, final String defaultValue) { 
            return properties.getProperty(name, defaultValue); 
        } 

        public boolean isEmpty() { 
            return properties.isEmpty();
        } 

        public Enumeration<Object> keys() { 
            return properties.keys(); 
        }

        public Set<Object> keySet() {
            return properties.keySet(); 
        } 

        public int size() {
            return properties.size(); 
        } 

        public Collection<Object> values() { 
            return properties.values(); 
        } 

        public static BuildProperties newInstance() throws IOException { 
            return new BuildProperties(); 
        }
     }
}




